package cn.drenal.capcap.service;

import cn.drenal.capcap.entity.Tag;
import cn.drenal.capcap.entity.vo.TagVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 标签服务接口
 */
public interface TagService extends IService<Tag> {
    /**
     * 创建标签
     *
     * @param tag 标签信息
     * @return 创建结果
     */
    TagVO createTag(Tag tag);

    /**
     * 更新标签
     *
     * @param id 标签ID
     * @param tag 标签信息
     * @return 更新结果
     */
    TagVO updateTag(Long id, Tag tag);

    /**
     * 删除标签
     *
     * @param id 标签ID
     */
    void deleteTag(Long id);

    /**
     * 根据ID查询标签
     *
     * @param id 标签ID
     * @return 标签信息
     */
    TagVO getTagById(Long id);

    /**
     * 分页查询标签列表
     *
     * @param page 分页参数
     * @param name 标签名称（可选）
     * @param status 状态（可选）
     * @return 标签分页列表
     */
    Page<TagVO> getTagPage(Page<Tag> page, String name, Integer status);
    
    /**
     * 获取所有启用的标签列表
     *
     * @return 标签列表
     */
    List<TagVO> getAllEnabledTags();
    
    /**
     * 计算标签的使用次数
     *
     * @param tagId 标签ID
     * @return 使用次数
     */
    Long calculateTagUseCount(Long tagId);
    
    /**
     * 将Tag实体转换为TagVO
     *
     * @param tag Tag实体
     * @return TagVO对象
     */
    TagVO convertToTagVO(Tag tag);
    
    /**
     * 获取热门话题列表
     *
     * @return 标签VO列表
     */
    List<TagVO> getRandomTags();
}